package it.fantacalcio.spring.service;

import it.fantacalcio.hibernate.dao.ClassificaDAO;
import it.fantacalcio.hibernate.sessionfactory.HibernateSessionFactory;
import it.fantacalcio.model.Classifica;
import it.fantacalcio.model.Squadra;

import java.util.List;

import org.hibernate.Transaction;

public class ClassificaServiceImpl implements ClassificaService {
	
	private ClassificaDAO classificaDAO;
	
	public ClassificaDAO getClassificaDAO() {
		return classificaDAO;
	}

	public void setClassificaDAO(ClassificaDAO classificaDAO) {
		this.classificaDAO = classificaDAO;
	}
	
	//----------------------------------------------------------------------------------
	
	@Override
	public int salva(Classifica classifica) throws Exception {
		if(classifica==null){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				classificaDAO.save(classifica);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public int cancella(Classifica classifica) throws Exception {
		if(classifica==null || classifica.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
			classificaDAO.delete(classifica);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}

	@Override
	public int modifica(Classifica classifica) throws Exception {
		if(classifica==null || classifica.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
			classificaDAO.update(classifica);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public Classifica get(Long id) throws Exception {
		if(id<1){
			return null;
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Classifica classifica = classificaDAO.get(id);
		tx.commit();
		return classifica;
	}
	
	@Override
	public List<Classifica> list() throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Classifica> result = classificaDAO.list();
		tx.commit();
		return result;
	}
	
	@Override
	public Classifica getByPosizione(int posizione) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Classifica classifica = classificaDAO.getByPosizione(posizione);
		tx.commit();
		return classifica;
	}

	@Override
	public Classifica getBySquadra(Squadra squadra) throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Classifica classifica = classificaDAO.getBySquadra(squadra);
		tx.commit();
		return classifica;
	}
	
	@Override
	public void reset() throws Exception{
		classificaDAO.deleteAll();
		for (Squadra squadra : MyServiceFactory.getSquadraService().list()) {
			Classifica classifica = new Classifica();
			classifica.setSquadra(squadra);
			classificaDAO.save(classifica);
		}
	}

}
